A client-server model is a computing model which partitions tasks or workloads between the providers of a resource or service, called servers, and resource or service requesters, called clients. Clients and servers communicate over a computer network. A server is a host computer that runs server programs which share their resources or services with clients. Typically, a client does not share any of its resources or services, but requests a server's resource or service functions. Clients initiate communication sessions with servers which await incoming requests. Functions such as email exchange, web access, and database access are typically built on the client-server model.
Some clients offer their users the option to operate in an “online communication” mode or a “cached communication” mode. In the online communication mode, the client provides the user with access to the user's communications only when the client is communicating online with a server that stores the user's communications. In the cached communication mode, the client may locally store, or cache, at least some of the user's communications, thereby providing the user with access to at least some of the user's communications even when the client is not engaged in online communications with the server that stores the user's communications. Many client-server models that offer a cached communications mode communicate between the client and the server by writing data to and reading the data from an object provided by a communication application. In computer science, an object is any entity that can be modified by the commands of a programming language. Examples of an object include a value, a variable, a function, and a data structure. However, both the client and the server may modify their own copy of the object when the client and server are offline. Consequently, the reestablishment of online communication between the client and the server may result in the loss of data in the objects due to differences between the client's modification to the client copy of the object and the server's modification to the server copy of the object.